iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Mobile Development

30天 - Flutter 日常系列 第 18

[Day18] Flutter - Environment (part2)

  • 分享至 

  • xImage
  •  

前言

Hi, 我是魚板伯爵今天要教大家如何初始化 Environment,在未來的開發的過程中可以快速又方便的切換環境,教學內容只會擷取片段程式碼,建議大家搭配完整程式碼來練習。

完整程式碼

Environment

環境設定可以使開發的時候很方便的切換設定,通常會有開發、測試和產品三個狀態,每一個狀態中的參數將會對應不同狀態而不同,而我們可以預先設定好檔案,當重新載入時就可以切換狀態。

設置參數

在專案層中創建一個設置參數的json檔案,並在pubspec.yaml中設定assets的資料夾路徑。

  assets:
    - assets/config/

環境設定

設定每個狀態的名稱,在開發時可以切換,而且還可以避免打錯字的問題。

class Environment {
  /// name of the environment
  final String name;

  /// default constructor
  const Environment(this.name);

  /// preset of common env name 'dev'
  static const String dev = 'development';

  /// preset of common env name 'prod'
  static const String prod = 'production';

  /// preset of common env name 'test'
  static const String test = 'testing';
}

讀取剛剛設定好的參數檔案,而參數則會根據不同的Environment來獲取。

import 'package:flutter/services.dart';
import 'dart:convert';
import 'dart:async';
import 'config_model.dart';

class ConfigReader {
  static ConfigModel _config =
      ConfigModel(API_HOST: "API_HOST", DEBUG: false, TESTING: false);

  static Future<void> initializeApp(String? env) async {
    env = env ?? "development";
    String configString = await rootBundle.loadString('assets/config/env.json');

    final jsonMap = json.decode(configString);
    _config = ConfigModel.fromMap(jsonMap[env]);
  }

  static ConfigModel config() {
    return _config;
  }
}

調用WidgetsFlutterBinding.ensureInitialized(),來實現初始元件的綁定,接著就可以初始環境設定了。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await ConfigReader.initializeApp(Environment.prod);
}

你可以試著切換不同的Environment,然後按下重新載入就可以看到Debug繃帶的變化了。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: ConfigReader.config().DEBUG,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Home(),
    );
  }
}

上一篇
[Day17] Flutter - 實作篇:專案架構 (Domain Driven Design)
下一篇
[Day19] Flutter - Const: Shared(part3)
系列文
30天 - Flutter 日常30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言